﻿Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.OleDb

'Documentación XML
''' <summary>
''' Esta clase almacenará los equipos y características
''' basicas de las diversas modalidades.
''' </summary>
''' <author> Jerón Fernández Caballero Rico</author>
''' <author> Daniel Morato Baudi</author>

Public Class Campeonato

    'Atributos
    Private _ListaNombresEquipo As List(Of String)
    Private _Lugar As String
    Private _FechaInicio As DateTime
    Private _FechaFin As DateTime

    'Constructores
    Public Sub New()

        Me._ListaNombresEquipo = New List(Of String)
        Me._Lugar = ""
        Me._FechaInicio = #1/1/1900#
        Me._FechaFin = #1/1/1900#

    End Sub

    'Documentación XML
    ''' <param name="Lugar">(String) Lugar de realización del campeonato.</param>
    ''' <param name="FechaInicio">(DateTime) Fecha de inicio del campeonato.</param>
    ''' <param name="FechaFin">(DateTime) Fecha de finalización del campeonato.</param>
    ''' <param name="ListaEquipos">(List(Of Equipo)) Lista de equipos participantes del campeonato.</param>
    Public Sub New(ByVal Lugar As String, ByVal FechaInicio As DateTime,
                   ByVal FechaFin As DateTime, ByVal ListaEquipos As List(Of String))

        For Each Equipo As String In ListaEquipos
            Me._ListaNombresEquipo.Add(Equipo)
        Next

        Me._Lugar = ComprobarCadena(Lugar)
        Me._FechaInicio = FechaInicio
        Me._FechaFin = FechaFin

    End Sub

    ' Métodos
    ''' <param name="CampeonatoInsertar">(Campeonato) Campeonato que insertaremos de la base de datos.</param>
    Public Sub InsertarEnBD(ByVal CampeonatoInsertar As Campeonato)

        Dim MiBD As New BaseDatos
        Dim ConsultaCampeonato As String
        Dim Equipos As String

        ConsultaCampeonato = "INSERT INTO Campeonato (Lugar, " & _
                             "Inicio, Fin) VALUES ('" & _
                             CampeonatoInsertar._Lugar & "', '" & _
                             CampeonatoInsertar._FechaInicio & "', '" & _
                             CampeonatoInsertar._FechaFin & "');"

        Equipos = "INSERT INTO Campeonato (EquiposParticipantes) VALUES ('"
        For Each Equipo As String In CampeonatoInsertar._ListaNombresEquipo

            Equipos &= Equipo & "', '"

        Next
        Equipos = Equipos.Remove(Equipos.LastIndexOf("', '"), 4)
        Equipos &= "');"

        MiBD.Insertar(ConsultaCampeonato)
        MiBD.Insertar(Equipos)

    End Sub

    ''' <param name="CampeonatoBorrar">(String) Campeonato que borraremos de la base de datos.</param>
    Public Sub BorrarDeBD(ByVal CampeonatoBorrar As String)

        Dim MiBD As New BaseDatos
        MiBD.Borrar("DELETE * FROM Campeonato WHERE 'Nombre' = " & CampeonatoBorrar & "';")

    End Sub

    ''' <param name="CampoBuscado">(String) Campo que queremos obtener de la base de datos.</param>
    ''' <param name="Filtro">(Opcional)(String) Filtro que aplicaremos a nuestra búsqueda.</param>
    ''' <returns>(OleDbDataReader)  Devuelve un objeto DataReader con los datos leídos.</returns>
    Public Function ConsultarBD(ByVal CampoBuscado As String, Optional ByVal Filtro As String = "") As OleDbDataReader

        Dim MiBD As New BaseDatos
        Dim DatosLeidos As OleDbDataReader

        If Filtro.Length > 0 Then
            DatosLeidos = MiBD.Leer("SELECT " & CampoBuscado & " FROM Campeonato WHERE " & Filtro)
        Else
            DatosLeidos = MiBD.Leer("SELECT " & CampoBuscado & " FROM Campeonato")
        End If

        Return DatosLeidos

    End Function

    'Destructores
    Public Sub Dispose()

        Me._ListaNombresEquipo = Nothing
        Me._Lugar = ""
        Me._FechaInicio = #1/1/1900#
        Me._FechaFin = #1/1/1900#

    End Sub
    Protected Overrides Sub Finalize()

        Me._ListaNombresEquipo = Nothing
        Me._Lugar = ""
        Me._FechaInicio = #1/1/1900#
        Me._FechaFin = #1/1/1900#

    End Sub

    'Get / Set
    Public Property Lugar As String
        Get
            Return Me._Lugar
        End Get
        Set(ByVal value As String)
            Me._Lugar = ComprobarCadena(value)
        End Set
    End Property
    Public Property FechaInicio As DateTime
        Get
            Return Me._FechaInicio
        End Get
        Set(ByVal value As DateTime)
            Me._FechaInicio = value
        End Set
    End Property
    Public Property FechaFin As DateTime
        Get
            Return Me._FechaFin
        End Get
        Set(ByVal value As DateTime)
            Me._FechaFin = value
        End Set
    End Property
    Public ReadOnly Property ListaEquipos() As List(Of String)
        Get
            Return Me._ListaNombresEquipo
        End Get
    End Property

End Class